main() {
  //
   // slice(1, 5);
  // slice(1, 5);
  // slice(1, null);

  // 按位置传参，跟书写位置有关
  slice2(1, 5);

  // 按命名传参，step 和 end 跟书写位置无关
  slice3(1, step: 2, end: 5);
}
//必传参数
int add(int a, int b) {
  return a + b;
}

//可选参数经典错误 int等价于 int | null  要么传参数 要么写null
void slice(int start, int? end) {
  print("切片开始索引为$start, 切片结束索引为$end");
}
//如果想真正不传就需要加[]

void slice2(int start, [int? end]) {
  print('切片开始索引$start, 结束索引$end');
}
//可选命名参数（项目最常见
void slice3(int start, {int? end, int? step}) {
  print('切片开始索引$start, 结束索引$end, 步长$step');
}